"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"We can draw the same conclusions for both training and scoring elapsed time: selecting the most informative features speed-up our pipeline. Of course, such speed-up is beneficial only if the generalization performance in terms of metrics remain the same. Let’s check the testing score."
],
"metadata": {
"id": "5tHmNZ85gmPa"
}
},
{
"cell_type": "code",
"source": [
"cv_results[\"test_score\"].plot.box(color=color, vert=False)\n",
"plt.xlabel(\"Accuracy score\")\n",
"_ = plt.title(\"Test score via cross-validation\")"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
},
"id": "4onQdLXGgfJn",
"outputId": "3ff34056-5a48-4bb1-abdb-ab2b5ada7f8c"
},
"execution_count": 18,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"We can observe that the model’s generalization performance selecting a subset of features decreases compared with the model using all available features. Since we generated the dataset, we can infer that the decrease is because of the selection. The feature selection algorithm did not choose the two informative features."
],
"metadata": {
"id": "n_Ym3R87g4vw"
}
},
{
"cell_type": "code",
"source": [
"for idx, pipeline in enumerate(cv_results_with_selection[\"estimator\"]):\n",
" print(\n",
" f\"Fold #{idx} - features selected are: \"\n",
" f\"{np.argsort(pipeline[0].scores_)[-2:]}\"\n",
" )"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "mTUZGkUPgowf",
"outputId": "87061117-1f82-4759-ac85-ef5ec8385e56"
},
"execution_count": 19,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Fold #0 - features selected are: [89 53]\n",
"Fold #1 - features selected are: [29 53]\n",
"Fold #2 - features selected are: [52 53]\n",
"Fold #3 - features selected are: [49 53]\n",
"Fold #4 - features selected are: [49 53]\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"We see that the feature 53 is always selected while the other feature varies depending on the cross-validation fold.\n",
"\n",
"If we would like to keep our score with similar generalization performance, **we could choose another metric to perform the test or select more features.** For instance, we could select the number of features based on a specific percentile of the highest scores."
],
"metadata": {
"id": "RgTtgRS5hBBJ"
}
},
{
"cell_type": "markdown",
"source": [
"#### Mutual information"
],
"metadata": {
"id": "HiK_yc8kk4GI"
}
},
{
"cell_type": "markdown",
"source": [
"The [*Automobile*](https://www.kaggle.com/toramky/automobile-dataset) dataset consists of 193 cars from the 1985 model year. The goal for this dataset is to predict a car's `price` (the target) from 23 of the car's features, such as `make`, `body_style`, and `horsepower`. In this example, we'll rank the features with mutual information and investigate the results by data visualization. (The original dataset requires data cleaning, you could refer to https://skill-lync.com/student-projects/project-1-1299)"
],
"metadata": {
"id": "k-V69-wYlCxA"
}
},
{
"cell_type": "code",
"source": [
"df = pd.read_csv(\"autos.csv\")\n",
"df.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 352
},
"id": "lg40S0_0llto",
"outputId": "d7663ccb-de86-4e56-b1d5-d4c0e5287c48"
},
"execution_count": 33,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" symboling make fuel_type aspiration num_of_doors body_style \\\n",
"0 3 alfa-romero gas std 2 convertible \n",
"1 3 alfa-romero gas std 2 convertible \n",
"2 1 alfa-romero gas std 2 hatchback \n",
"3 2 audi gas std 4 sedan \n",
"4 2 audi gas std 4 sedan \n",
"\n",
" drive_wheels engine_location wheel_base length ... engine_size \\\n",
"0 rwd front 88.6 168.8 ... 130 \n",
"1 rwd front 88.6 168.8 ... 130 \n",
"2 rwd front 94.5 171.2 ... 152 \n",
"3 fwd front 99.8 176.6 ... 109 \n",
"4 4wd front 99.4 176.6 ... 136 \n",
"\n",
" fuel_system bore stroke compression_ratio horsepower peak_rpm city_mpg \\\n",
"0 mpfi 3.47 2.68 9 111 5000 21 \n",
"1 mpfi 3.47 2.68 9 111 5000 21 \n",
"2 mpfi 2.68 3.47 9 154 5000 19 \n",
"3 mpfi 3.19 3.40 10 102 5500 24 \n",
"4 mpfi 3.19 3.40 8 115 5500 18 \n",
"\n",
" highway_mpg price \n",
"0 27 13495 \n",
"1 27 16500 \n",
"2 26 16500 \n",
"3 30 13950 \n",
"4 22 17450 \n",
"\n",
"[5 rows x 25 columns]"
],
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
symboling
\n",
"
make
\n",
"
fuel_type
\n",
"
aspiration
\n",
"
num_of_doors
\n",
"
body_style
\n",
"
drive_wheels
\n",
"
engine_location
\n",
"
wheel_base
\n",
"
length
\n",
"
...
\n",
"
engine_size
\n",
"
fuel_system
\n",
"
bore
\n",
"
stroke
\n",
"
compression_ratio
\n",
"
horsepower
\n",
"
peak_rpm
\n",
"
city_mpg
\n",
"
highway_mpg
\n",
"
price
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
3
\n",
"
alfa-romero
\n",
"
gas
\n",
"
std
\n",
"
2
\n",
"
convertible
\n",
"
rwd
\n",
"
front
\n",
"
88.6
\n",
"
168.8
\n",
"
...
\n",
"
130
\n",
"
mpfi
\n",
"
3.47
\n",
"
2.68
\n",
"
9
\n",
"
111
\n",
"
5000
\n",
"
21
\n",
"
27
\n",
"
13495
\n",
"
\n",
"
\n",
"
1
\n",
"
3
\n",
"
alfa-romero
\n",
"
gas
\n",
"
std
\n",
"
2
\n",
"
convertible
\n",
"
rwd
\n",
"
front
\n",
"
88.6
\n",
"
168.8
\n",
"
...
\n",
"
130
\n",
"
mpfi
\n",
"
3.47
\n",
"
2.68
\n",
"
9
\n",
"
111
\n",
"
5000
\n",
"
21
\n",
"
27
\n",
"
16500
\n",
"
\n",
"
\n",
"
2
\n",
"
1
\n",
"
alfa-romero
\n",
"
gas
\n",
"
std
\n",
"
2
\n",
"
hatchback
\n",
"
rwd
\n",
"
front
\n",
"
94.5
\n",
"
171.2
\n",
"
...
\n",
"
152
\n",
"
mpfi
\n",
"
2.68
\n",
"
3.47
\n",
"
9
\n",
"
154
\n",
"
5000
\n",
"
19
\n",
"
26
\n",
"
16500
\n",
"
\n",
"
\n",
"
3
\n",
"
2
\n",
"
audi
\n",
"
gas
\n",
"
std
\n",
"
4
\n",
"
sedan
\n",
"
fwd
\n",
"
front
\n",
"
99.8
\n",
"
176.6
\n",
"
...
\n",
"
109
\n",
"
mpfi
\n",
"
3.19
\n",
"
3.40
\n",
"
10
\n",
"
102
\n",
"
5500
\n",
"
24
\n",
"
30
\n",
"
13950
\n",
"
\n",
"
\n",
"
4
\n",
"
2
\n",
"
audi
\n",
"
gas
\n",
"
std
\n",
"
4
\n",
"
sedan
\n",
"
4wd
\n",
"
front
\n",
"
99.4
\n",
"
176.6
\n",
"
...
\n",
"
136
\n",
"
mpfi
\n",
"
3.19
\n",
"
3.40
\n",
"
8
\n",
"
115
\n",
"
5500
\n",
"
18
\n",
"
22
\n",
"
17450
\n",
"
\n",
" \n",
"
\n",
"
5 rows × 25 columns
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
]
},
"metadata": {},
"execution_count": 33
}
]
},
{
"cell_type": "markdown",
"source": [
"The scikit-learn algorithm for MI treats discrete features differently from continuous features. Consequently, you need to tell it which are which. As a rule of thumb, anything that *must* have a `float` dtype is *not* discrete. Categoricals (`object` or `categorial` dtype) can be treated as discrete by giving them a label encoding"
],
"metadata": {
"id": "YX3VJQKJl4hf"
}
},
{
"cell_type": "code",
"source": [
"X = df.copy()\n",
"y = X.pop(\"price\")\n",
"\n",
"# Label encoding for categoricals\n",
"for colname in X.select_dtypes(\"object\"):\n",
" X[colname], _ = X[colname].factorize()\n",
"\n",
"# All discrete features should now have integer dtypes (double-check this before using MI!)\n",
"discrete_features = X.dtypes == int"
],
"metadata": {
"id": "VOVazcEFlv6Q"
},
"execution_count": 34,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"Scikit-learn has two mutual information metrics in its `feature_selection` module: one for real-valued targets (`mutual_info_regression`) and one for categorical targets (`mutual_info_classif`). Our target, `price`, is real-valued. The next cell computes the MI scores for our features and wraps them up in a nice dataframe."
],
"metadata": {
"id": "SgQfNAYNmGhw"
}
},
{
"cell_type": "code",
"source": [
"def make_mi_scores(X, y, discrete_features):\n",
" mi_scores = mutual_info_regression(X, y, discrete_features=discrete_features)\n",
" mi_scores = pd.Series(mi_scores, name=\"MI Scores\", index=X.columns)\n",
" mi_scores = mi_scores.sort_values(ascending=False)\n",
" return mi_scores\n",
"\n",
"mi_scores = make_mi_scores(X, y, discrete_features)\n",
"mi_scores[::3] # show a few features with their MI scores"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "36ZK4lJNmDZi",
"outputId": "b67fcb48-2df8-4f98-f0c9-397a177f06f5"
},
"execution_count": 35,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"curb_weight 1.552832\n",
"highway_mpg 0.959290\n",
"length 0.615354\n",
"bore 0.504682\n",
"stroke 0.391373\n",
"num_of_cylinders 0.330589\n",
"compression_ratio 0.134892\n",
"fuel_type 0.047279\n",
"Name: MI Scores, dtype: float64"
]
},
"metadata": {},
"execution_count": 35
}
]
},
{
"cell_type": "code",
"source": [
"def plot_mi_scores(scores):\n",
" scores = scores.sort_values(ascending=True)\n",
" width = np.arange(len(scores))\n",
" ticks = list(scores.index)\n",
" plt.barh(width, scores)\n",
" plt.yticks(width, ticks)\n",
" plt.title(\"Mutual Information Scores\")\n",
"\n",
"\n",
"plt.figure(dpi=100, figsize=(8, 5))\n",
"plot_mi_scores(mi_scores)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 460
},
"id": "Vi9tYOlEmKvL",
"outputId": "c741f89c-0c60-4f4d-fa84-d02500098898"
},
"execution_count": 36,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"The `fuel_type` feature has a fairly low MI score, but as we can see from the figure, it clearly separates two `price` populations with different trends within the `horsepower` feature. **This indicates that `fuel_type` contributes an interaction effect and might not be unimportant after all.** Before deciding a feature is unimportant from its MI score, it's good to investigate any possible interaction effects -- domain knowledge can offer a lot of guidance here."
],
"metadata": {
"id": "A34J5fAZpNJO"
}
},
{
"cell_type": "code",
"source": [
"sns.lmplot(x=\"horsepower\", y=\"price\", hue=\"fuel_type\", data=df);"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 369
},
"id": "TCwOeNdepGUP",
"outputId": "7255762f-7168-44a9-cd38-6c578861b4c1"
},
"execution_count": 38,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"### Sequential feature selection"
],
"metadata": {
"id": "o0rWGFi9pvq4"
}
},
{
"cell_type": "markdown",
"source": [
"Sequential Feature Selection is available in the `SequentialFeatureSelector` transformer. SFS can be either forward or backward:\n",
"\n",
"* Forward-SFS is a greedy procedure that iteratively finds the best new feature to add to the set of selected features. Concretely, we initially start with zero feature and find the one feature that maximizes a cross-validated score when an estimator is trained on this single feature. Once that first feature is selected, we repeat the procedure by adding a new feature to the set of selected features. The procedure stops when the desired number of selected features is reached, as determined by the n_features_to_select parameter.\n",
"\n",
"* Backward-SFS follows the same idea but works in the opposite direction: instead of starting with no feature and greedily adding features, we start with all the features and greedily remove features from the set. The direction parameter controls whether forward or backward SFS is used.\n",
"\n",
"In general, forward and backward selection do not yield equivalent results. Also, one may be much faster than the other depending on the requested number of selected features: if we have 10 features and ask for 7 selected features, forward selection would need to perform 7 iterations while backward selection would only need to perform 3."
],
"metadata": {
"id": "wAQBoFEVp1X1"
}
},
{
"cell_type": "code",
"source": [
"X, y = load_iris(return_X_y=True)\n",
"knn = KNeighborsClassifier(n_neighbors=3)"
],
"metadata": {
"id": "XN-VAbTRpV_I"
},
"execution_count": 41,
"outputs": []
},
{
"cell_type": "code",
"source": [
"sfs = SequentialFeatureSelector(knn, n_features_to_select=3)\n",
"sfs.fit(X, y)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "FWjzoHnk-Orv",
"outputId": "2d761371-31d3-4f4b-ed23-a9b2c9e865e7"
},
"execution_count": 42,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"SequentialFeatureSelector(estimator=KNeighborsClassifier(n_neighbors=3),\n",
" n_features_to_select=3)"
]
},
"metadata": {},
"execution_count": 42
}
]
},
{
"cell_type": "code",
"source": [
"sfs.transform(X).shape"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "8pYRsVKX-nk8",
"outputId": "06c63564-28e1-4912-9a03-e99e64660ed7"
},
"execution_count": 43,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(150, 3)"
]
},
"metadata": {},
"execution_count": 43
}
]
},
{
"cell_type": "markdown",
"source": [
"### Feature selection from model"
],
"metadata": {
"id": "Wkh5pr70-sCN"
}
},
{
"cell_type": "markdown",
"source": [
"`SelectFromModel` is a meta-transformer that can be used alongside any estimator that assigns importance to each feature through a specific attribute (such as `coef_`, `feature_importances_`) or via an `importance_getter` callable after fitting. The features are considered unimportant and removed if the corresponding importance of the feature values are below the provided threshold parameter. \n",
"\n",
"Apart from specifying the threshold numerically, there are built-in heuristics for finding a threshold using a string argument. Available heuristics are “mean”, “median” and float multiples of these like “0.1*mean”. In combination with the threshold criteria, one can use the `max_features` parameter to set a limit on the number of features to select."
],
"metadata": {
"id": "cAf7ARk0Howp"
}
},
{
"cell_type": "code",
"source": [
"X, y = load_iris(return_X_y=True)"
],
"metadata": {
"id": "gkWQgTpd-pwt"
},
"execution_count": 45,
"outputs": []
},
{
"cell_type": "code",
"source": [
"lsvc = LinearSVC(C=0.01, penalty=\"l1\", dual=False).fit(X, y)"
],
"metadata": {
"id": "NvnykC0WJC4_"
},
"execution_count": 48,
"outputs": []
},
{
"cell_type": "code",
"source": [
"model = SelectFromModel(lsvc, prefit=True)"
],
"metadata": {
"id": "jsBkMzF4JFAb"
},
"execution_count": 49,
"outputs": []
},
{
"cell_type": "code",
"source": [
"X_new = model.transform(X)\n",
"X_new.shape"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "WbuJtKY2JFRg",
"outputId": "d9739206-61be-4a02-dec1-4e5dc3957a57"
},
"execution_count": 50,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(150, 3)"
]
},
"metadata": {},
"execution_count": 50
}
]
},
{
"cell_type": "markdown",
"source": [
"### A Concret example"
],
"metadata": {
"id": "3zP7dVWRLgmn"
}
},
{
"cell_type": "markdown",
"source": [
"The following dataset is a record of neighborhoods in California district, predicting the median house value (target) given some information about the neighborhoods, as the average number of rooms, the latitude, the longitude or the median income of people in the neighborhoods (block)."
],
"metadata": {
"id": "k8srd8jgJZ94"
}
},
{
"cell_type": "code",
"source": [
"X, y = fetch_california_housing(as_frame=True, return_X_y=True)"
],
"metadata": {
"id": "qT8aM1mqJN3J"
},
"execution_count": 52,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# To speed up the computation, we take the first 10000 samples\n",
"X = X[:10000]\n",
"y = y[:10000]\n",
"X.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "nUIwkfs4JlWO",
"outputId": "ad99d5a2-70ed-47c2-d5be-11aa243806b2"
},
"execution_count": 53,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude \\\n",
"0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88 \n",
"1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86 \n",
"2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85 \n",
"3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 \n",
"4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 \n",
"\n",
" Longitude \n",
"0 -122.23 \n",
"1 -122.22 \n",
"2 -122.24 \n",
"3 -122.25 \n",
"4 -122.25 "
],
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
MedInc
\n",
"
HouseAge
\n",
"
AveRooms
\n",
"
AveBedrms
\n",
"
Population
\n",
"
AveOccup
\n",
"
Latitude
\n",
"
Longitude
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
8.3252
\n",
"
41.0
\n",
"
6.984127
\n",
"
1.023810
\n",
"
322.0
\n",
"
2.555556
\n",
"
37.88
\n",
"
-122.23
\n",
"
\n",
"
\n",
"
1
\n",
"
8.3014
\n",
"
21.0
\n",
"
6.238137
\n",
"
0.971880
\n",
"
2401.0
\n",
"
2.109842
\n",
"
37.86
\n",
"
-122.22
\n",
"
\n",
"
\n",
"
2
\n",
"
7.2574
\n",
"
52.0
\n",
"
8.288136
\n",
"
1.073446
\n",
"
496.0
\n",
"
2.802260
\n",
"
37.85
\n",
"
-122.24
\n",
"
\n",
"
\n",
"
3
\n",
"
5.6431
\n",
"
52.0
\n",
"
5.817352
\n",
"
1.073059
\n",
"
558.0
\n",
"
2.547945
\n",
"
37.85
\n",
"
-122.25
\n",
"
\n",
"
\n",
"
4
\n",
"
3.8462
\n",
"
52.0
\n",
"
6.281853
\n",
"
1.081081
\n",
"
565.0
\n",
"
2.181467
\n",
"
37.85
\n",
"
-122.25
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
]
},
"metadata": {},
"execution_count": 53
}
]
},
{
"cell_type": "markdown",
"source": [
"The feature reads as follow:\n",
"\n",
"* MedInc: median income in block\n",
"* HouseAge: median house age in block\n",
"* AveRooms: average number of rooms\n",
"* AveBedrms: average number of bedrooms\n",
"* Population: block population\n",
"* AveOccup: average house occupancy\n",
"* Latitude: house block latitude\n",
"* Longitude: house block longitude\n",
"* MedHouseVal: Median house value in 100k$ (target)\n",
"\n",
"To assert the quality of our inspection technique, let’s add some random feature that won’t help the prediction (un-informative feature)"
],
"metadata": {
"id": "8i7IQeucJsWY"
}
},
{
"cell_type": "code",
"source": [
"# Adding random features\n",
"rng = np.random.RandomState(0)\n",
"bin_var = pd.Series(rng.randint(0, 1, X.shape[0]), name='rnd_bin')\n",
"num_var = pd.Series(np.arange(X.shape[0]), name='rnd_num')\n",
"X_with_rnd_feat = pd.concat((X, bin_var, num_var), axis=1)"
],
"metadata": {
"id": "SLi9SoU6JqWe"
},
"execution_count": 54,
"outputs": []
},
{
"cell_type": "code",
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X_with_rnd_feat, y, random_state=42)"
],
"metadata": {
"id": "OjVGGwhmJz91"
},
"execution_count": 57,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"In linear models, the target value is modeled as a linear combination of the features."
],
"metadata": {
"id": "m8Byb20-KF5I"
}
},
{
"cell_type": "code",
"source": [
"model = RidgeCV()\n",
"\n",
"model.fit(X_train, y_train)\n",
"\n",
"print(f'model score on training data: {model.score(X_train, y_train)}')\n",
"print(f'model score on testing data: {model.score(X_test, y_test)}')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "CVQ3s5uuJ83F",
"outputId": "829c716a-43ca-4701-d474-d7bc862f15c8"
},
"execution_count": 60,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"model score on training data: 0.6048814128047645\n",
"model score on testing data: 0.5866391379089506\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"Our linear model obtains a $R^2$ score of .60, so it explains a significant part of the target. Its coefficient should be somehow relevant. Let’s look at the coefficient learnt"
],
"metadata": {
"id": "41HBpjFYKe4a"
}
},
{
"cell_type": "code",
"source": [
"coefs = pd.DataFrame(\n",
" model.coef_,\n",
" columns=['Coefficients'], index=X_train.columns\n",
")\n",
"\n",
"coefs.plot(kind='barh', figsize=(9, 7))\n",
"plt.title('Ridge model')\n",
"plt.axvline(x=0, color='.5')\n",
"plt.subplots_adjust(left=.3)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 444
},
"id": "tdWavBbTKZxa",
"outputId": "5f300833-73c9-463b-9666-95a1863b9925"
},
"execution_count": 61,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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UznqqKP43e9+x7Rp05g6dSpbbrkll112Wevr5IxUkjSsG264ge233/457d/97neZM2cO1113Hffeey877LAD06ZN4/rrr+e2227jyiuvpKrYa6+9mDVrFieffDIXXHABl1xyCeuuuy6vfe1rOeGEEzjvvPOeNe7g4CCHHHIIs2bN4hWveAX33Xffc479kY98hI9+9KPssssu/OpXv2K33Xbj5ptvBuCWW27hkksu4aGHHuLP//zP+bu/+zuOPfZYbrjhhmdmv5///OfZbbfd+MQnPsFTTz3FI4880vo6GaSSpCXy85//nAMPPJBVVlmF9ddfnze84Q1cddVVzJo1iwsvvJBtt90WgAULFnDbbbcxbdq0UY07e/Zspk2b9sznN9dZZ53n9PnJT37CTTfd9Mz6H//4RxYsWADAnnvuyeqrr87qq6/Oeuutxz333POc/XfYYQfe//7388QTT7D33nszderUJT7/oQxSSdKwtthiC77zne+Mun9V8fGPf5y//du/XWY1Pf3008yePZuJEyc+Z9vqq6/+zPIqq6zCk08++Zw+06ZNY9asWZx//vnMmDGDI488kve+972tavIZqSRpWG9605t4/PHHOeWUU55pmzt3LmuvvTbf+ta3eOqppxgcHGTWrFnsuOOO7Lbbbpx66qnPzBB/85vf8Ic//GHUx9tpp52YNWsWd955J8Cwt3Z33XVXvvSlLz2zvvCW7UjWWmstHnrooWfW7777btZff30OOeQQ/uZv/oZrrrlm1PWNZFzMSJP0AedV1ZY9LkWSxqXRflxlaUrCueeeyxFHHMFxxx3HxIkT6evr44tf/CILFixgm222IQmf+9zn2GCDDdhggw24+eabed3rXgfApEmTOPPMM1lvvfVGdbwpU6ZwyimnsO+++/L000+z3nrrcdFFFz2rz4knnsiHPvQhtt56a5588kmmTZvGySefPOKYkydPZuedd2bLLbdkjz32YMstt+T4449n1VVXZdKkSZx++uljv0CNVFXrQUYcvPP1EKmqpxfTr49xGKT9/f3lP+yt8cB/2Hvlc/PNN/Oa17ym12WstIa7/kmurqr+oX2X+q3dJH1JfpnkdGABcHuSrya5McmFSV7Q9Ns+yXVJrgM+tJgxZyT5bpILktyW5HNd2xZ0Lb8jycxmeWaSrySZneSOJNOTnJrk5oV9RjjWoUkG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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"The `AveBedrms` have the higher coefficient. However, we can’t compare the magnitude of these coefficients directly, since they are not scaled. Indeed, `Population` is an integer which can be thousands, while `AveBedrms` is around 4 and `Latitude` is in degree.\n",
"\n",
"So the Population coefficient is expressed in `“100k$/habitant”` while the `AveBedrms` is expressed in `“100k$/nb of bedrooms”` and the Latitude coefficient in `“100k$/degree”`. We see that changing population by one does not change the outcome, while as we go south (latitude increase) the price becomes cheaper. Also, adding a bedroom (keeping all other feature constant) shall rise the price of the house by `80k$`.\n",
"\n",
"So looking at the coefficient plot to gauge feature importance can be misleading as some of them vary on a small scale, while others vary a lot more, several decades. So before any interpretation, we need to scale each column (removing the mean and scaling the variance to 1)."
],
"metadata": {
"id": "BEwY2u2PKrvR"
}
},
{
"cell_type": "code",
"source": [
"model = make_pipeline(StandardScaler(), RidgeCV())\n",
"\n",
"model.fit(X_train, y_train)\n",
"\n",
"print(f'model score on training data: {model.score(X_train, y_train)}')\n",
"print(f'model score on testing data: {model.score(X_test, y_test)}')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hk5ebi7xKlJ0",
"outputId": "e3182ee2-6c9c-4ddf-b935-a545c423df65"
},
"execution_count": 65,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"model score on training data: 0.6048511948222112\n",
"model score on testing data: 0.5863381274564599\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"coefs = pd.DataFrame(\n",
" model[1].coef_,\n",
" columns=['Coefficients'], index=X_train.columns\n",
")\n",
"\n",
"coefs.plot(kind='barh', figsize=(9, 7))\n",
"plt.title('Ridge model')\n",
"plt.axvline(x=0, color='.5')\n",
"plt.subplots_adjust(left=.3)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 444
},
"id": "8KjhPtSzLP3P",
"outputId": "9288292a-4415-4585-c361-4c75afa51828"
},
"execution_count": 66,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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N92UE088EYBjjjmGu+66i0mTJnH00Ufzm9/8hsmTJzNp0iS22morrrjiitaPkytSSdKQbrrpJnbYYYcXlH/nO99h1qxZ3HDDDTz44IPsuOOOTJ48mRtvvJE777yTq6++mqpin332Yfr06Zx88slcdNFFXHbZZay33nq8/vWv5wtf+AIXXHDB8/odGBjgsMMOY/r06WyyySY89NBDLzj33/3d3/Gxj32MXXfdlV/84hfsscce3HrrrQDcdtttXHbZZTz66KP86Z/+KR/84Ac5/vjjuemmmxasfr/4xS+yxx578MlPfpJ58+bx+OOPt36cDFJJ0mL52c9+xsEHH8wqq6zCBhtswJve9CauueYapk+fzo9//GO22247AObOncudd97J5MmTR9TvjBkzmDx58oL3b6677rovqHPJJZdwyy23LNj/wx/+wNy5cwHYe++9WWONNVhjjTVYf/31eeCBB17Qfscdd+R973sfTz/9NPvuuy+TJk1a7PkPZpBKkoa05ZZb8u1vf3vE9auKY489lg984ANLbUzPPvssM2bMYNy4cS84tsYaayzYXmWVVXjmmWdeUGfy5MlMnz6dCy+8kKlTp3LUUUfxnve8p9WYvEcqSRrSbrvtxlNPPcUpp5yyoGz27Nmss846nHPOOcybN4+BgQGmT5/OTjvtxB577MGpp566YIX4q1/9it/97ncjPt/OO+/M9OnTueeeewCGvLS7++6785WvfGXB/vxLtsNZe+21efTRRxfs33fffWywwQYcdthh/M3f/A3XXXfdiMc3nDGxIk3SB1xQVVv1eCiSNCb14m1FSTj//PM58sgjOeGEExg3bhx9fX18+ctfZu7cuWy77bYk4XOf+xwbbrghG264IbfeeitveMMbABg/fjxnnnkm66+//ojON3HiRE455RT2339/nn32WdZff30uvvji59U58cQT+fCHP8w222zDM888w+TJkzn55JOH7XPChAnssssubLXVVuy1115stdVWfP7zn2e11VZj/PjxnH766aN/gBqpqtadDNt55+MhUlXPLqJeH2MwSPv7+8s/7K2VxbRp05hx9xwu+uPmrfrxfaRLxq233srrXve6Xg9jpTXU45/k2qrqH1x3iV/aTdKX5PYkpwNzgbuSfD3JzUl+nORFTb0dktyQ5Abgw4voc2qS7yS5KMmdST7XdWxu1/Y7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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"Now that the coefficients have been scaled, we can safely compare them. The median income feature, with longitude and latitude are the three variables that most influence the model.\n",
"\n",
"The plot above tells us about dependencies between a specific feature and the target when all other features remain constant, i.e., conditional dependencies. An increase of the `HouseAge` will induce an increase of the price when all other features remain constant. On the contrary, an increase of the average rooms will induce an decrease of the price when all other features remain constant."
],
"metadata": {
"id": "NehlVHi2LWHY"
}
},
{
"cell_type": "markdown",
"source": [
"We can check the coefficient variability through cross-validation: it is a form of data perturbation."
],
"metadata": {
"id": "ux2-205wLmSh"
}
},
{
"cell_type": "code",
"source": [
"cv_model = cross_validate(\n",
" model, X_with_rnd_feat, y, cv=RepeatedKFold(n_splits=5, n_repeats=5),\n",
" return_estimator=True, n_jobs=2\n",
")\n",
"coefs = pd.DataFrame(\n",
" [model[1].coef_\n",
" for model in cv_model['estimator']],\n",
" columns=X_with_rnd_feat.columns\n",
")\n",
"plt.figure(figsize=(9, 7))\n",
"sns.boxplot(data=coefs, orient='h', color='cyan', saturation=0.5)\n",
"plt.axvline(x=0, color='.5')\n",
"plt.xlabel('Coefficient importance')\n",
"plt.title('Coefficient importance and its variability')\n",
"plt.subplots_adjust(left=.3)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 458
},
"id": "deiQJiPNLR1_",
"outputId": "e4238395-ff2a-4a94-a018-ba1fea30d4e4"
},
"execution_count": 64,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"Now if we want to select the four features which are the most important according to the coefficients. The `SelectFromModel` is meant just for that. `SelectFromModel` accepts a `threshold` parameter and will select the features whose importance (defined by the coefficients) are above this threshold."
],
"metadata": {
"id": "wL8szAkwMLto"
}
},
{
"cell_type": "code",
"source": [
"model"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "T8C_GOhgM1L4",
"outputId": "6512cc7e-be65-4d42-ee28-52c26e00aadb"
},
"execution_count": 67,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Pipeline(steps=[('standardscaler', StandardScaler()),\n",
" ('ridgecv', RidgeCV(alphas=array([ 0.1, 1. , 10. ])))])"
]
},
"metadata": {},
"execution_count": 67
}
]
},
{
"cell_type": "code",
"source": [
"importance = np.abs(model[1].coef_)\n",
"threshold = np.sort(importance)[-5] + 0.01"
],
"metadata": {
"id": "JrrrUqq4Lo2S"
},
"execution_count": 68,
"outputs": []
},
{
"cell_type": "code",
"source": [
"feature_names = np.array(X.columns)\n",
"sfm = SelectFromModel(model[1], threshold=threshold).fit(X, y)\n",
"print(f\"Features selected by SelectFromModel: {feature_names[sfm.get_support()]}\")"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "nqtT14UoM4OS",
"outputId": "603fb5b4-c3b5-4175-9079-8c8370c9f942"
},
"execution_count": 72,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Features selected by SelectFromModel: ['MedInc' 'AveBedrms' 'Latitude' 'Longitude']\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"#### Linear models with sparse coefficients (Lasso)"
],
"metadata": {
"id": "25OIEBwCNZUw"
}
},
{
"cell_type": "markdown",
"source": [
"In it important to keep in mind that the associations extracted depend on the model. To illustrate this point we consider a Lasso model, that performs feature selection with a L1 penalty. Let us fit a Lasso model with a strong regularization parameters alpha"
],
"metadata": {
"id": "vHsNnqoQNhsT"
}
},
{
"cell_type": "code",
"source": [
"model = make_pipeline(StandardScaler(), Lasso(alpha=.015))\n",
"\n",
"model.fit(X_train, y_train)\n",
"\n",
"print(f'model score on training data: {model.score(X_train, y_train)}')\n",
"print(f'model score on testing data: {model.score(X_test, y_test)}')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "LWLjWFkmM9LL",
"outputId": "e3de2fb1-32ed-4ab2-bb9d-8fd673368fb7"
},
"execution_count": 73,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"model score on training data: 0.5933235371761756\n",
"model score on testing data: 0.5673786563118284\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"coefs = pd.DataFrame(\n",
" model[1].coef_,\n",
" columns=['Coefficients'], index=X_train.columns\n",
")\n",
"\n",
"coefs.plot(kind='barh', figsize=(9, 7))\n",
"plt.title('Lasso model, strong regularization')\n",
"plt.axvline(x=0, color='.5')\n",
"plt.subplots_adjust(left=.3)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 444
},
"id": "LTDzbcc6NlYv",
"outputId": "3f8a1cd1-2eab-4560-c2b2-394f0a196389"
},
"execution_count": 74,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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r72Wo446aoXOCXDnnXfy3//937zrXe9a4WNXhGEqSRpWVbHvvvtyyCGHcMoppwBw5ZVXctttt61wmB5//PGce+65bLbZZsybNw+A+fPnA3DAAQcs99h99tmHffbZZww96ITp8ccfv9LD1GleSdKwzjvvPFZffXUOP/zwR9dtv/327L777nzwgx9km222Ydttt+XUU099dPsnP/lJdt55Z7bbbjs+9rGPAXD44Ydz8803s9dee3Hsscfy5je/mUsvvZQZM2Zw0003MWvWrEc/uvWss85ixx13ZPvtt+cVr3gF0PkYzPe85z0ADA4Osv/++7Pzzjuz8847c9FFFwFw9NFH87a3vY1Zs2axxRZbcNxxxwFw1FFHcdNNNzFjxgw++MEP8pvf/IaZM2cyY8YMttlmGy644IJxea4cmUqShnX11Vez0047/dn673znO8yfP58rr7yS22+/nZ133pmZM2dy1VVXceONN3LJJZdQVeyzzz7MnTuXE044gbPOOovzzjuPDTfckBe+8IV86lOf4owzznhMu4ODgxx66KHMnTuXZz3rWfz+97//s3O///3v5wMf+AC77747v/jFL3j1q1/NddddB8D111/Peeedx913383znvc83vnOd3LMMcdw9dVXPzoK/vSnP82rX/1qPvKRj/Dwww9z7733jstzZZhKklbIhRdeyEEHHcRqq63GxhtvzEtf+lIuvfRS5s6dy9lnn80OO+wAwJIlS7jxxhuZOXPmqNqdN28eM2fOfPT9nRtssMGf7XPuuedy7bXXPvr4D3/4A0uWLAFg7733Zs0112TNNddko4024rbbbvuz43feeWfe9ra38eCDD/L617+eGTNmrHD/h2OYSpKGtfXWW/Otb31r1PtXFR/+8Id5xzvesdJqeuSRR5g3bx5Tp079s21rrrnmo8urrbYaDz300J/tM3PmTObOncuZZ57J7NmzOfLII3nLW97Sui6vmUqShvXyl7+cBx54gBNPPPHRdQsWLGD99dfn1FNP5eGHH2ZwcJC5c+eyyy678OpXv5qTTjrp0ZHir371K373u9+N+ny77rorc+fOZeHChQDDTvPusccefP7zn3/08dLp22VZb731uPvuux99fOutt7Lxxhtz6KGH8td//ddcfvnlo65veSbFyDRJH3BGVW3T41IkaVLqxVuQknD66adzxBFHcOyx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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"Here the model score is a bit lower, because of the strong regularization. However, it has zeroed out 3 coefficients, selecting a small number of variables to make its prediction."
],
"metadata": {
"id": "eCstXIgINwgh"
}
},
{
"cell_type": "markdown",
"source": [
"#### Randomforest with feature importance"
],
"metadata": {
"id": "9xppGbQ4N1Zw"
}
},
{
"cell_type": "markdown",
"source": [
"On some algorithms, there are some feature importance methods, inherently built within the model. It is the case in RandomForest models. Let’s investigate the built-in feature_importances_ attribute."
],
"metadata": {
"id": "EZi4Yk_hN935"
}
},
{
"cell_type": "code",
"source": [
"model = RandomForestRegressor()\n",
"\n",
"model.fit(X_train, y_train)\n",
"\n",
"print(f'model score on training data: {model.score(X_train, y_train)}')\n",
"print(f'model score on testing data: {model.score(X_test, y_test)}')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0BZSUHpLNn5X",
"outputId": "4b1440c3-908d-4d09-9138-71862efa6378"
},
"execution_count": 75,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"model score on training data: 0.9796271614609334\n",
"model score on testing data: 0.8457060700865664\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"importances = model.feature_importances_\n",
"indices = np.argsort(importances)\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.barh(range(len(importances)), importances[indices])\n",
"ax.set_yticks(range(len(importances)))\n",
"_ = ax.set_yticklabels(np.array(X_train.columns)[indices])"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 265
},
"id": "xBAIYWWFOCcy",
"outputId": "dd7b532f-70d7-4f43-8958-2427e1cc7ff7"
},
"execution_count": 76,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"Median income is still the most important feature. It also has a small bias toward high cardinality features, such as the noisy feature `rnd_num`, which are here predicted having `0.07` importance, more than `HouseAge` (which has low cardinality)."
],
"metadata": {
"id": "XbR4LmgUOLUA"
}
},
{
"cell_type": "markdown",
"source": [
"#### Feature importance by permutation"
],
"metadata": {
"id": "NiOjvqYDOVhR"
}
},
{
"cell_type": "markdown",
"source": [
"We introduce here a new technique to evaluate the feature importance of any given fitted model. It basically shuffles a feature and sees how the model changes its prediction. Thus, the change in prediction will correspond to the feature importance."
],
"metadata": {
"id": "HGPNltcJOYlo"
}
},
{
"cell_type": "code",
"source": [
"# Any model could be used here\n",
"\n",
"\n",
"model = RandomForestRegressor()\n",
"model.fit(X_train, y_train)\n",
"\n",
"print(f'model score on training data: {model.score(X_train, y_train)}')\n",
"print(f'model score on testing data: {model.score(X_test, y_test)}')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "W20bLMRSOJJq",
"outputId": "478b016a-fc0f-4e4a-93a5-d1ff38504db5"
},
"execution_count": 77,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"model score on training data: 0.9795237577232964\n",
"model score on testing data: 0.8467958072484991\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"r = permutation_importance(model, X_test, y_test, n_repeats=30, random_state=42)"
],
"metadata": {
"id": "5J9M7E1vOmMN"
},
"execution_count": 79,
"outputs": []
},
{
"cell_type": "code",
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"indices = r.importances_mean.argsort()\n",
"plt.barh(range(len(indices)), r.importances_mean[indices], xerr=r.importances_std[indices])\n",
"\n",
"ax.set_yticks(range(len(indices)))\n",
"_ = ax.set_yticklabels(np.array(X_train.columns)[indices])"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 265
},
"id": "gNU5FFTsPToC",
"outputId": "098861ca-aedf-4d99-902a-c9cb205b0eaa"
},
"execution_count": 80,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZwAAAD4CAYAAADYU1DBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAeXUlEQVR4nO3de7xVdZ3/8dfbG4gXTLERyTiT4hgKoZJZmh0v41jmHVOkAseRR2U25djETM6ENb8ZzcbRzMnBMhUvFJqXpDAnPakk6UaBAyqagSVlo6akgiTHz++P9T2y2Z7LPnvvs9a5vJ+Px3mw9net9V2fr0f5+P2utddHEYGZmVlv26zoAMzMbHBwwjEzs1w44ZiZWS6ccMzMLBdOOGZmlostig6gLxsxYkQ0NTUVHYaZWb+yaNGi5yNi58p2J5wuNDU1USqVig7DzKxfkfR0R+1eUjMzs1w44ZiZWS6ccMzMLBdOOGZmlgsnHDMzy4UTjpmZ5cIJx8zMcuGEY2ZmufAXP7vQunoNTTPmFR2GmVnDrLrg6MKu7RmOmZnlwgnHzMxy4YRjZma5cMIxM7NcFJJwJIWk68o+byHpOUl39LCfFkkT0/YqSSMaHauZmTVGUTOcV4F9JG2dPv81sLqgWMzMLAdFPhb9Y+Bo4CZgMnAj8EEASdsAlwH7AFsCMyPitpSgvge8B3gc2LqyU0lNwE+A+4EPkCWy4yJinaQ9gCuAnYE24OSIeKr3hmhmlp9nb5jR7THNCy/q9piWlpYGRPNWRd7DmQOcKmkoMB74Zdm+LwN3R8QBwKHARSkJfRpYGxHvBr4C7N9J32OAyyNib+Al4KTUfn1qfw9ZMvp95YmSpksqSSq1rV1T9yDNzCxT2AwnIpam2chkstlOuSOBYyWdmz4PBd4JHAJ8s+z8pZ10vzIiFqftRUCTpO2AURFxSzr/tU7imgXMAhgyckzUMDQzs0LsctoF3R7TUuAXP4t+08DtwDeAZmCnsnYBJ0XEivKDJVXb7/qy7TY6WHozM7N8Ff1Y9FXA+RHRWtF+J3C2UoaRtG9qvxc4LbXtQ7YUV5WIeBl4RtLx6fwhkobVGb+ZmVWp0IQTEc9ExDc72PU1socFlkpanj4DfBvYVtJjwFfJlst64hPA59JS3C+AXWqL3MzMekoRvk3RmSEjx8TIqZcUHYaZWcPk8fJOSYsiYmJle9FLamZmNkg44ZiZWS6KfkqtTxs3ajilAh8hNDMbSDzDMTOzXDjhmJlZLpxwzMwsF76H04XW1WtomjGv6DAsJ0XWejcbDDzDMTOzXDjhmJlZLpxwzMwsF044ZmaWi15POJJe6cGxzZI+UPb5U5I+mbanSdq1huuvkjSip+eZmVlj9bWn1JqBV8je5ExEXFG2bxqwDPhd7lGZmVndCkk4ko4BzgO2Al4AppAVSfsU0Cbp48DZwOFkCWgVMBG4XtI64P3AY8DEiHhe0kTgGxHRLGkn4EZgFPAAWTG39ut+HPhcuu4vgc9ERFvvj9j6osr675W13nurrrvZYFXUPZz7gQMjYl9gDvCPEbEKuAL4r4iYEBH3tR8cETcBJWBK2reui76/AtwfEXsDt5CVpkbSu4FTgIMiYgJZJdAplSdLmi6pJKnUtnZNI8ZqZmYUt6T2DuD7kkaSzTZWNrDvQ4ATASJinqQXU/vhwP7AQ6mQ6NbA/1WeHBGzgFmQ1cNpYFzWx1TWfy+y1rvZYFBUwrkMuDgibpfUDMysoY8NbJyhDa3ieAHXRMQ/1XAtMzOrU1FLasOB1Wl7aln7y8B2nZxTuW8V2YwF4KSy9nuB0wAkfRh4W2r/GTBJ0tvTvh0lja4xfjMz66E8Es4wSc+U/ZxDNqOZK2kR8HzZsT8CTpC0WNIHK/q5Grgi7dsaOB+4VFKJ7H5Mu/OBQyQtJ1ta+w1ARDxK9qDCTyUtBe4CRjZ6sGZm1jFF+DZFZ4aMHBMjp15SdBiWE7+806wxJC2KiImV7X7TgJmZ5cIJx8zMcuGEY2Zmuehrr7bpU8aNGk7J6/pmZg3hGY6ZmeXCCcfMzHLhhGNmZrnwPZwutK5eQ9OMeUWHYVXy92jM+jbPcMzMLBdOOGZmlgsnHDMzy0XdCUfS8ZJC0l41nr+VpEsk/UrSk5Juk/SOeuMyM7O+pREznMlkFTwn13j+v5OVHfiriBgD3Ar8UKlKmpmZDQx1JRxJ2wIHA2cAp0o6StLcsv3Nku5I20dKekDSw5LmStpW0jDgdOALEdEGEBHfA9YDh6XzPilpqaQlkmantr+QdEtqWyLpA5KaJC0ru/a5kmam7RZJl6bSBsskHVDPuM3MrOfqfSz6OGB+RDwh6QXgReB9kraJiFeBU4A5kkaQ1aI5IiJelfQl4Byy2cxvIuJPFf2WgL0lPZvO+0BEPC9px7T/m8DPI+IESZsD27Kx0FpnhkXEBEmHAFcB+9Q5divYszfM2ORz88KL3nJMS0tLTtGYWXfqXVKbDMxJ23OAk4H5wDGStgCOBm4DDgTGAgskLSar8llNtc3DgLkR8TxARPyxrP3bqa0tItZU0deN6fh7ge0l7dDRQZKmSypJKrWtraZbMzOrRs0znDTbOAwYJymAzYEgWyI7C/gjUIqIl9P9mLsiYnJFH9sA75S0XUS8XLZrf+AOsiRVrQ1smkCHVuyvrDTXYeW5iJgFzIKsAFsPrm852+W0Czb53OIvfpr1afXMcCYBsyNidEQ0RcRuwEqyv/j3A85k4+xnIXCQpD0gSzSS9kzLbtcAF6elMSR9EhgG3J1+Tpa0U9rXvqT2M+DTqW1zScOBPwBvl7STpCHARyviPSUdfzCwpspZkZmZNUg9CWcycEtF283AqWSzkw+nP4mI54BpwI2SlgIPAO2PUf8T8BrwhKQnyZblTojMcuD/AT+XtAS4OJ3z98ChklqBRcDYiHgd+CrwIHAX8HhFbK9JegS4guwhBzMzy5EiBv6qkaQW4NyIKPXkvCEjx8TIqZf0TlDWcH6XmlnfIGlRREysbPebBszMLBeD4m3REdFcdAxmZoOdZzhmZpaLQTHDqdW4UcMp+b6AmVlDeIZjZma5cMIxM7NcOOGYmVkufA+nC62r19A0Y17RYQwK/g6N2cDnGY6ZmeXCCcfMzHLhhGNmZrlwwjEzs1w44ZiZWS76RMKR1CRpWdFxmJlZ7+nVx6JTpU9FxBu9eR3rn569Ycab280LL3pzu6WlpYBozKy3NXyGk2YrKyRdC7wCPCXpSknLJf1U0tbpuP0lLUmF1c7qps9pkn4oab6kJyV9vWzfK2XbkyRdnbavlvRtSQsl/VpSs6SrJD3Wfkwn15ouqSSp1LbWRUHNzBqlt2Y4Y4CpwL8CvwIuj4gzJf0AOAm4Dvge8NmIuFfSRZ139aYJwL7AemCFpMsi4rfdnPM24P3AscDtwEHA3wEPSZoQEYsrT4iIWcAsyAqwVRGX1WiX0y54c7vFX/w0G/B66x7O0xGxMG2vLPuLfRHQJGkHYIeIuDe1z66iz59FxJqIeA14FBhdxTk/iqykaSvwh4hoTct7y4GmagdjZmb1662E82rZ9vqy7TZqn1V11k/5LGRoJ+e8UXH+G3XEYWZmNSjkKbWIeAl4SdLBqWlKHd39QdK7JW0GnFB/dGZm1huKfCz6dOBySYsB1dHPDOAO4BfA7xsRmJmZNZ6yWxzWkSEjx8TIqZcUHcag4LdFmw0ckhZFxMTK9j7xxU8zMxv4+tSNc0l/A1xY0bwyIgq5NzNu1HBK/j9vM7OG6FMJJyLuBO4sOg4zM2s8L6mZmVkunHDMzCwXfWpJra9pXb2Gphnzig6jYfwkmJkVyTMcMzPLhROOmZnlwgnHzMxy4YRjZma5qCvhlBc/6w2Sfixph/TzmRrOb5Z0R2/EZmZmPdOnZzgR8ZH0ZukdgB4nHDMz6zsa/li0pAnAFcAw4CngbyPiRUktwC+BQ8kSyBkRcZ+kYcDVwD7ACmBX4KyIKElaBUwELgB2T2+WvguYB5wbER9N1/wWUIqIqyUdBVwCrAXuL4trG+CydJ0tgZkRcVujx98XPXvDDACaF24srNrS0lJQNGY2WPXGDOda4EsRMZ6s0uZXyvZtEREHAJ8va/8M8GJEjAX+Bdi/gz5nAE9FxISI+GJnF5Y0FLgSOCb1s0vZ7i8Dd6frHwpclJJQZR/TJZUkldrWrqluxGZm1q2GznAkDScrHf3z1HQNMLfskB+mPxexscTzwcClABGxTNLSOkLYi+xln0+meK4Dpqd9RwLHSjo3fR4KvBN4rLyDiJgFzIKsPEEdsfQZu5x2AQAt/uKnmRUo7zcNtJd5rqfUNMAGNp2dVZaW7oiAkyJiRR3XNTOzGjV0SS0i1gAvSvpgavoE8PMuTgFYAHwMQNJYYFwHx7wMbFf2+WlgrKQhknYADk/tjwNNknZPnyeXnXMncLYkpWvtW92ozMysEeqd4QyT9EzZ54uBqcAV6WGAX5OVku7KfwPXSHqULGEsBza5eRIRL0haIGkZ8JOI+KKkHwDLgJXAI+m41yRNB+ZJWgvcx8ZE9TWyhwmWStosnffRWgduZmY9U3iJaUmbA1umZLE78L/AX0XEnwsNjIFXYtov7zSzPHRWYrovvC16GHCPpC3J7rN8pi8kGzMza6zCE05EvEz2XRszMxvACk84fdm4UcMpeRnKzKwh+vSrbczMbOBwwjEzs1w44ZiZWS58D6cLravX0DRjXpfH+FFjM7PqeIZjZma5cMIxM7NcOOGYmVkunHDMzCwXNSccScdLCkl71Xh+i6QVkpZIeihVCjUzswGqnhnOZLISzpO7O7ALUyLiPWRvjL6ou4PNzKz/qinhSNqWrFLnGcCpko6SNLdsf7OkO9L2kZIekPSwpLnp3EoPAKPS8TtKulXSUkkLJY3vpn2mpGsk3SfpaUknSvq6pFZJ89NLQZF0gaRH0/nfqGXc5Z69YQbP3jCD5ubmersyMxsUap3hHAfMj4gngBeAF4H3Sdom7T8FmCNpBHAecERE7AeUgHM66O8o4Na0fT7wSESMB/4ZuLabdoDdgcOAY4HrgHsiYhywDjha0k7ACcDe6fx/62xgkqZLKkkqta1d09lhZmbWQ7V+8XMycGnangOcDMwHjpF0E3A08I/Ah4CxwIJUaHMrstlMu+slbQVsC7TfwzkYOAkgIu6WtJOk7btoh6wo2+uSWoHNUywArUATcAfwGvDdNPO6o7OBRcQsYBZk9XA6O26X0y4AoMVf/DQzq0qPE46kHclmE+MkBdlf8EFW2fMs4I9AKSJeTuWc74qIzu7zTAEWkd2/uQw4sedDAGA9QES8Ien12FhV7g1gi4jYIOkAslLUk4DPpjGYmVlOallSmwTMjojREdEUEbuRlWveAOwHnEk26wFYCBwkaQ8ASdtI2rO8s5Qc/gU4MD3xdh9ZIkJSM/B8RPypi/ZupftGwyPix8AXgPfUMG4zM6tDLUtqk4ELK9puBk4lW6qaBkwFiIjnJE0DbpQ0JB17HvBE+ckRsU7SfwJfTD9XSVoKrG3vC5jZSXs1tgNukzSUrKpoR/eRzMysF2nj6pNVGjJyTIycekmXx/jlnWZmm5K0KCLeUsnZbxowM7NcOOGYmVkuXA+nC+NGDafkJTMzs4bwDMfMzHLhhGNmZrlwwjEzs1z4Hk4XWlevoWnGvA73+XFoM7Oe8QzHzMxy4YRjZma5cMIxM7NcOOGYmVkuak44kl6p+DxN0rfqD6nq64+Q9LqkT+V1TTMzq11/nuGcTFb+oLNaO2Zm1of0SsKR1CTpbklLJf1M0jtT+9WSJpUd90r6c6SkeyUtlrRM0gdT+5GSHpD0sKS5qa5Nu8nAPwCjJL2jrM8zJD0h6UFJV7bPuiTtLOlmSQ+ln4NqHd+zN8ygubm51tPNzAalehLO1ilBLJa0GPhq2b7LgGsiYjxwPfDNbvo6DbgzIiaQFUdbLGkEWe2cIyJiP6BEqmMjaTdgZEQ8CPwAOCW170oq5gYcBOxVdo1Lgf+KiPeSlar+TkeBSJouqSSp1LZ2TbX/LMzMrBv1fPFzXUoQQHYPB2ivf/B+NpaLng18vZu+HiIrrrYlcGtELJb0IWAssCCrVM1WwAPp+FPIEg1k1UWvAv4TOAD4eUT8McU0F2ivMHoEMDb1BbC9pG0jYpN7URExC5gFWT2cjoLd5bQLaPEXP83MeiTvNw1sIM2qJG1GlkSIiHslHQIcDVwt6WLgReCuiOjoHs1kYBdJU9LnXSWN6ebamwEHRsRrDRiHmZn1UG89NPALspLTAFOA+9L2KmD/tH0ssCWApNHAHyLiSrKlrv3IHgg4SNIe6ZhtJO0paU9g24gYFRFNEdEE/AdZEnoI+JCkt0nagmzprN1PgbPbP0iagJmZ5aa3Es7ZwOmSlgKfAP4+tV9JlhCWkC27vZram4Elkh4hWy67NCKeA6YBN6Z+HiC7JzMZuKXiejcDkyNiNfDvwIPAArIE134j5nPAxPQgw6OAH6c2M8uRIjq8TdFvtd+XSTOcW4CrIqIyQVVlyMgxMXLqJR3u88s7zcw6JmlRREysbO/P38PpzMz01NwyYCVwa8HxmJkZA7A8QUScW3QMZmb2VgMu4TTSuFHDKXnpzMysIQbikpqZmfVBTjhmZpYLJxwzM8uFE04XWlf7XWpmZo3ihGNmZrlwwjEzs1w44ZiZWS6ccMzMLBc9TjiS2soqc86VNKyRAUlqkfSWd/BUHPP58utK+rGkHRoZh5mZNVYtM5x1ETEhIvYB/kwxb13+PPBmwomIj0TESwXEYWZmVap3Se0+YA9JO0q6Nb36f6Gk8QCSZkqaLekBSU9KOjO1N0u6o70TSd9KFUM3Ienbqdzzcknnp7bPAbsC90i6J7WtSiWpkXROmn0tk/T51NYk6TFJV6a+fipp6zrHbmZmPVBzwkmv//8w0AqcDzwSEeOBfwauLTt0PHAYWf2bf5W0aw8u8+X0iuvxZHV0xkfEN4HfAYdGxKEVMe0PnA68DzgQOFPSvmn3GODyiNgbeIlNi7N1qrm5uQfhmplZZ2pJOFun1/+XgN8A3wUOBmYDRMTdwE6Stk/H3xYR6yLieeAe4IAeXOtjkh4GHgH2BsZ2c/zBwC0R8WpEvAL8EPhg2rcyIhan7UVAU0cdSJqeZlWltrX+4qeZWaPU8rbodRGxSXlmSV0dX1nhLYANbJrshlaeJOkvgXOB90bEi5Ku7ui4Hlhftt0GdLikFhGzgFmQFWBraWmp45JmZtauUY9F3wdMgez+DPB8RPwp7TtO0lBJO5GVkn4IeBoYK2lIerrs8A763J6sBPUaSX9BtnzX7mVgu07iOF7SMEnbACekNjMzK1ij6uHMBK6StBRYC0wt27eUbCltBPC1iPgdgKQfsLEq5yOVHUbEEkmPAI8DvwUWlO2eBcyX9Lvy+zgR8XCaCT2Ymr4TEY9IamrAGM3MrA6KqFzxamDn0kzglYj4Rq9dpBcNGTkm1v/+yaLDMDPrVyQtSg98bcJvGjAzs1z0aonpiJjZm/2bmVn/4RmOmZnlwgmnC+NGDS86BDOzAcMJx8zMcuGEY2ZmuXDCMTOzXDjhdKF1td+lZmbWKE44ZmaWCyccMzPLhROOmZnlwgnHzMxyUVXCkXS8pJC0Vy0XkdQiaYWkxanU8/Qenr9JSWozM+t/qp3hTAbuT3/Wakoq3HYQcKGkreroC3izzLWZmfUD3SYcSduSlW4+AzhV0lGS5pbtf3P2IelISQ9IeljS3HRupW3JCqu1dXVOus7jqcT0iWXXmylptqQFwOz0+RpJ90l6WtKJkr4uqVXSfElbpvMukPSopKWSqiqX8PoLz1RzmJmZVaGaGc5xwPyIeAJ4AXgReF+qqAlwCjBH0gjgPOCIiNgPKAHnlPVzfSrQtoKsEFtbZ+dIGgpcCRwD7A/sUhHT2HRO+4xrd+Aw4FjgOuCeiBgHrAOOTtVGTwD2jojxwL91NlhJ0yWVJJXijbYq/vGYmVk1qkk4k4E5aXsOcDIwHzgmLWkdDdwGHEiWCBZIWkxW9XN0WT9T0l/27wTOlTS6i3P2AlZGxJORVYi7riKm2yNiXdnnn0TE60ArsHmKj/S5CVgDvAZ8V9KJZFVJOxQRsyJiYkRM3Grn0Z0dZmZmPdTlPRBJO5LNHMZJCrK/zAM4HTgL+CNQioiXJQm4q2zW0aGIeC4tk72PbAbylnMkTegm7lcrPq9Pfb8h6fXYWMb0DWCLiNgg6QDgcGAS8Nk0LjMzy0l3M5xJwOyIGB0RTRGxG7AS2ADsB5zJxtnPQuAgSXsASNpG0p6VHUoaBuwLPNXFOY8DTZJ2T6fV87BC+32o4RHxY+ALwHvq6c/MzHquu6e8JgMXVrTdDJwK3AFMI1sGa5+5TANulDQkHXse8ETavl7SOmAIcHVELALo6JyIeCI9Oj1P0lrgPmC7mkaY2Q64Ld0bEpveWzIzsxxo4+qTVRoyckys//2TRYdhZtavSFoUERMr2/2mATMzy4UTjpmZ5cIJpwvjRg0vOgQzswHDCcfMzHLhhGNmZrlwwjEzs1w44ZiZWS6ccMzMLBdOOGZmlgsnHDMzy4UTjpmZ5cIJx8zMctHnE46kJknLutg/TdK3Otn3i96LzMzMeqKwhKNMr14/Ij7Qm/2bmVn1ck04abayQtK1wCvAU5KulLRc0k8lbZ2O21/SEklLyCqLdmc3SS2SnpT0lbLrvZL+bE77b5L0uKTrU4XSjmKcLqkkqfTcc8/VP2gzMwOKmeGMAf4b2BvYDbg8IvYGXgJOSsd8Dzg7IqqtzHlAOnc8cLKkt9RhIKsy+nlgLPAu4KCOOoqIWRExMSIm7rzzzlVe3szMulNEwnk6Iham7ZURsThtLyIrK70DsENE3JvaZ1fR510R8UJErAN+CBzcwTEPRsQzEfEGsBhoqn0IZmbWU0UknFfLtteXbbfRfcnrzlSWLe2ojGmjrmVmZjXoc0+pRcRLwEuS2mcpU6o47a8l7ZjuAR0PLOi1AM3MrCZ9LuEkpwOXS1oMdHhzv8KDwM3AUuDmiCj1ZnBmZtZziuho9ckAJk6cGKWSc5eZWU9IWhQRb3l4q6/OcMzMbIDpNzfOJf0NcGFF88qIOKGIeMzMrGf6TcKJiDuBO4uOw8zMauMlNTMzy4UTjpmZ5cIJx8zMcuGEY2ZmuXDCMTOzXDjhmJlZLpxwzMwsF044ZmaWC79LrQuSXgZWFB1Hg40Ani86iAbzmPqPgTguj+mtRkfEWypY9ps3DRRkRUcvoOvPJJU8pr5vII4JBua4PKbqeUnNzMxy4YRjZma5cMLp2qyiA+gFHlP/MBDHBANzXB5TlfzQgJmZ5cIzHDMzy4UTjpmZ5WLQJxxJR0laIelXkmZ0sH+IpO+n/b+U1JR/lD1XxbgOkfSwpA2SJhURY09VMaZzJD0qaamkn0kaXUScPVHFmD4lqVXSYkn3SxpbRJw90d2Yyo47SVJI6vOPFFfxe5om6bn0e1os6e+KiLOnqvldSfpY+u9quaQb6rpgRAzaH2Bz4CngXcBWwBJgbMUxnwGuSNunAt8vOu4GjasJGA9cC0wqOuYGjelQYFja/nRf/11VOabty7aPBeYXHXe9Y0rHbQfcCywEJhYddwN+T9OAbxUday+MawzwCPC29Pnt9VxzsM9wDgB+FRG/jog/A3OA4yqOOQ64Jm3fBBwuSTnGWItuxxURqyJiKfBGEQHWoJox3RMRa9PHhcA7co6xp6oZ05/KPm4D9PWnfKr5bwrga8CFwGt5BlejasfU31QzrjOByyPiRYCI+L96LjjYE84o4Ldln59JbR0eExEbgDXATrlEV7tqxtXf9HRMZwA/6dWI6lfVmCSdJekp4OvA53KKrVbdjknSfsBuETEvz8DqUO2/eyel5dybJO2WT2h1qWZcewJ7SlogaaGko+q54GBPODYASfo4MBG4qOhYGiEiLo+I3YEvAecVHU89JG0GXAz8Q9GxNNiPgKaIGA/cxcZVkf5uC7JltWZgMnClpB1q7WywJ5zVQPn/ibwjtXV4jKQtgOHAC7lEV7tqxtXfVDUmSUcAXwaOjYj1OcVWq57+nuYAx/dqRPXrbkzbAfsALZJWAQcCt/fxBwe6/T1FxAtl/759B9g/p9jqUc2/f88At0fE6xGxEniCLAHVZLAnnIeAMZL+UtJWZA8F3F5xzO3A1LQ9Cbg70t2zPqyacfU33Y5J0r7A/5Alm7rWmnNSzZjK/+M+Gngyx/hq0eWYImJNRIyIiKaIaCK713ZsRJSKCbcq1fyeRpZ9PBZ4LMf4alXN3xO3ks1ukDSCbInt1zVfsegnJYr+AT5ClrWfAr6c2r5K9h8BwFBgLvAr4EHgXUXH3KBxvZfs/15eJZuxLS865gaM6X+BPwCL08/tRcfcgDFdCixP47kH2LvomOsdU8WxLfTxp9Sq/D39R/o9LUm/p72KjrlB4xLZEuijQCtwaj3X86ttzMwsF4N9Sc3MzHLihGNmZrlwwjEzs1w44ZiZWS6ccMzMLBdOOGZmlgsnHDMzy8X/B1YQCJ+0KHyhAAAAAElFTkSuQmCC\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"We see again that the feature `MedInc`, Latitude and Longitude are very important for the model. We note that our random variable `rnd_num` is now very less important than latitude. Indeed, the feature importance built-in in `RandomForest` has bias for continuous data, such as `AveOccup` and `rnd_num`."
],
"metadata": {
"id": "ZSzzW-1OQL0Y"
}
},
{
"cell_type": "markdown",
"source": [
"#### Feature rejection using Boruta"
],
"metadata": {
"id": "I1T6QCk1QpF_"
}
},
{
"cell_type": "code",
"source": [
"# define Boruta feature selection method\n",
"feat_selector = BorutaPy(model, n_estimators='auto', verbose=2, random_state=1)"
],
"metadata": {
"id": "El1azRgZQohX"
},
"execution_count": 85,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# find all relevant features \n",
"feat_selector.fit(X_train.values, y_train.values)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "zlVL9xjvP3de",
"outputId": "ba1dfec2-31cd-4947-807d-820b967ebdba"
},
"execution_count": 89,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Iteration: \t1 / 100\n",
"Confirmed: \t0\n",
"Tentative: \t10\n",
"Rejected: \t0\n",
"Iteration: \t2 / 100\n",
"Confirmed: \t0\n",
"Tentative: \t10\n",
"Rejected: \t0\n",
"Iteration: \t3 / 100\n",
"Confirmed: \t0\n",
"Tentative: \t10\n",
"Rejected: \t0\n",
"Iteration: \t4 / 100\n",
"Confirmed: \t0\n",
"Tentative: \t10\n",
"Rejected: \t0\n",
"Iteration: \t5 / 100\n",
"Confirmed: \t0\n",
"Tentative: \t10\n",
"Rejected: \t0\n",
"Iteration: \t6 / 100\n",
"Confirmed: \t0\n",
"Tentative: \t10\n",
"Rejected: \t0\n",
"Iteration: \t7 / 100\n",
"Confirmed: \t0\n",
"Tentative: \t10\n",
"Rejected: \t0\n",
"Iteration: \t8 / 100\n",
"Confirmed: \t9\n",
"Tentative: \t0\n",
"Rejected: \t1\n",
"\n",
"\n",
"BorutaPy finished running.\n",
"\n",
"Iteration: \t9 / 100\n",
"Confirmed: \t9\n",
"Tentative: \t0\n",
"Rejected: \t1\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"BorutaPy(estimator=RandomForestRegressor(n_estimators=44,\n",
" random_state=RandomState(MT19937) at 0x7F0639E28E20),\n",
" n_estimators='auto',\n",
" random_state=RandomState(MT19937) at 0x7F0639E28E20, verbose=2)"
]
},
"metadata": {},
"execution_count": 89
}
]
},
{
"cell_type": "code",
"source": [
"# check selected features \n",
"np.array(X_train.columns)[feat_selector.support_]"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "V5aQGB1cRWYY",
"outputId": "fdfd1412-4330-41fb-8288-558ac0186f1b"
},
"execution_count": 92,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population',\n",
" 'AveOccup', 'Latitude', 'Longitude', 'rnd_num'], dtype=object)"
]
},
"metadata": {},
"execution_count": 92
}
]
},
{
"cell_type": "code",
"source": [
"# check ranking of features\n",
"feat_selector.ranking_"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "WaQ2itMTRX99",
"outputId": "3b0688dc-ff55-4104-d169-154a8a71a7d8"
},
"execution_count": 91,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([1, 1, 1, 1, 1, 1, 1, 1, 2, 1])"
]
},
"metadata": {},
"execution_count": 91
}
]
},
{
"cell_type": "code",
"source": [
"# call transform() on X to filter it down to selected features\n",
"X_filtered = feat_selector.transform(X_train.values)\n",
"X_filtered.shape"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "UGaMazEIRb74",
"outputId": "1c97eacc-b0c8-465f-a603-9f526d9f559b"
},
"execution_count": 95,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(7500, 9)"
]
},
"metadata": {},
"execution_count": 95
}
]
},
{
"cell_type": "markdown",
"source": [
"## Dimensional reduction"
],
"metadata": {
"id": "tILVdZOoUA8f"
}
},
{
"cell_type": "markdown",
"source": [
"We now looked at our model-based method for feature engineering: principal component analysis (PCA). You could think of PCA as a partitioning of the variation in the data. PCA is a great tool to help you discover important relationships in the data and can also be used to create more informative features."
],
"metadata": {
"id": "GOuAQ5oUUPTP"
}
},
{
"cell_type": "markdown",
"source": [
"There are two ways you could use PCA for feature engineering.\n",
"\n",
"The first way is to use it as a descriptive technique. Since the components tell you about the variation, **you could compute the MI scores for the components and see what kind of variation is most predictive of your target.** That could give you ideas for kinds of features to create -- a product of `'Height'` and `'Diameter'` if `'Size'` is important, say, or a ratio of `'Height'` and `'Diameter'` if `Shape` is important. You could even try clustering on one or more of the high-scoring components.\n",
"\n",
"The second way is to use the components themselves as features. Because the components expose the variational structure of the data directly, **they can often be more informative than the original features.** Here are some use-cases:\n",
"- **Dimensionality reduction**: When your features are highly redundant (*multicollinear*, specifically), PCA will partition out the redundancy into one or more near-zero variance components, which you can then drop since they will contain little or no information.\n",
"- **Anomaly detection**: Unusual variation, not apparent from the original features, will often show up in the low-variance components. These components could be highly informative in an anomaly or outlier detection task.\n",
"- **Noise reduction**: A collection of sensor readings will often share some common background noise. PCA can sometimes collect the (informative) signal into a smaller number of features while leaving the noise alone, thus boosting the signal-to-noise ratio.\n",
"- **Decorrelation**: Some ML algorithms struggle with highly-correlated features. PCA transforms correlated features into uncorrelated components, which could be easier for your algorithm to work with."
],
"metadata": {
"id": "x1CYu0lXU4vG"
}
},
{
"cell_type": "markdown",
"source": [
"PCA basically gives you direct access to the correlational structure of your data. You'll no doubt come up with applications of your own!"
],
"metadata": {
"id": "FBYABylCVU9_"
}
},
{
"cell_type": "code",
"source": [
"def plot_variance(pca, width=8, dpi=100):\n",
" # Create figure\n",
" fig, axs = plt.subplots(1, 2)\n",
" n = pca.n_components_\n",
" grid = np.arange(1, n + 1)\n",
" # Explained variance\n",
" evr = pca.explained_variance_ratio_\n",
" axs[0].bar(grid, evr)\n",
" axs[0].set(\n",
" xlabel=\"Component\", title=\"% Explained Variance\", ylim=(0.0, 1.0)\n",
" )\n",
" # Cumulative Variance\n",
" cv = np.cumsum(evr)\n",
" axs[1].plot(np.r_[0, grid], np.r_[0, cv], \"o-\")\n",
" axs[1].set(\n",
" xlabel=\"Component\", title=\"% Cumulative Variance\", ylim=(0.0, 1.0)\n",
" )\n",
" # Set up figure\n",
" fig.set(figwidth=8, dpi=100)\n",
" return axs"
],
"metadata": {
"id": "y4WY_DqCUEsx"
},
"execution_count": 97,
"outputs": []
},
{
"cell_type": "code",
"source": [
"df = pd.read_csv(\"autos.csv\")\n",
"df.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 352
},
"id": "KY-9l7p1VtRM",
"outputId": "d3ba83cc-7903-4504-e080-6393ab5e91a5"
},
"execution_count": 98,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" symboling make fuel_type aspiration num_of_doors body_style \\\n",
"0 3 alfa-romero gas std 2 convertible \n",
"1 3 alfa-romero gas std 2 convertible \n",
"2 1 alfa-romero gas std 2 hatchback \n",
"3 2 audi gas std 4 sedan \n",
"4 2 audi gas std 4 sedan \n",
"\n",
" drive_wheels engine_location wheel_base length ... engine_size \\\n",
"0 rwd front 88.6 168.8 ... 130 \n",
"1 rwd front 88.6 168.8 ... 130 \n",
"2 rwd front 94.5 171.2 ... 152 \n",
"3 fwd front 99.8 176.6 ... 109 \n",
"4 4wd front 99.4 176.6 ... 136 \n",
"\n",
" fuel_system bore stroke compression_ratio horsepower peak_rpm city_mpg \\\n",
"0 mpfi 3.47 2.68 9 111 5000 21 \n",
"1 mpfi 3.47 2.68 9 111 5000 21 \n",
"2 mpfi 2.68 3.47 9 154 5000 19 \n",
"3 mpfi 3.19 3.40 10 102 5500 24 \n",
"4 mpfi 3.19 3.40 8 115 5500 18 \n",
"\n",
" highway_mpg price \n",
"0 27 13495 \n",
"1 27 16500 \n",
"2 26 16500 \n",
"3 30 13950 \n",
"4 22 17450 \n",
"\n",
"[5 rows x 25 columns]"
],
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
symboling
\n",
"
make
\n",
"
fuel_type
\n",
"
aspiration
\n",
"
num_of_doors
\n",
"
body_style
\n",
"
drive_wheels
\n",
"
engine_location
\n",
"
wheel_base
\n",
"
length
\n",
"
...
\n",
"
engine_size
\n",
"
fuel_system
\n",
"
bore
\n",
"
stroke
\n",
"
compression_ratio
\n",
"
horsepower
\n",
"
peak_rpm
\n",
"
city_mpg
\n",
"
highway_mpg
\n",
"
price
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
3
\n",
"
alfa-romero
\n",
"
gas
\n",
"
std
\n",
"
2
\n",
"
convertible
\n",
"
rwd
\n",
"
front
\n",
"
88.6
\n",
"
168.8
\n",
"
...
\n",
"
130
\n",
"
mpfi
\n",
"
3.47
\n",
"
2.68
\n",
"
9
\n",
"
111
\n",
"
5000
\n",
"
21
\n",
"
27
\n",
"
13495
\n",
"
\n",
"
\n",
"
1
\n",
"
3
\n",
"
alfa-romero
\n",
"
gas
\n",
"
std
\n",
"
2
\n",
"
convertible
\n",
"
rwd
\n",
"
front
\n",
"
88.6
\n",
"
168.8
\n",
"
...
\n",
"
130
\n",
"
mpfi
\n",
"
3.47
\n",
"
2.68
\n",
"
9
\n",
"
111
\n",
"
5000
\n",
"
21
\n",
"
27
\n",
"
16500
\n",
"
\n",
"
\n",
"
2
\n",
"
1
\n",
"
alfa-romero
\n",
"
gas
\n",
"
std
\n",
"
2
\n",
"
hatchback
\n",
"
rwd
\n",
"
front
\n",
"
94.5
\n",
"
171.2
\n",
"
...
\n",
"
152
\n",
"
mpfi
\n",
"
2.68
\n",
"
3.47
\n",
"
9
\n",
"
154
\n",
"
5000
\n",
"
19
\n",
"
26
\n",
"
16500
\n",
"
\n",
"
\n",
"
3
\n",
"
2
\n",
"
audi
\n",
"
gas
\n",
"
std
\n",
"
4
\n",
"
sedan
\n",
"
fwd
\n",
"
front
\n",
"
99.8
\n",
"
176.6
\n",
"
...
\n",
"
109
\n",
"
mpfi
\n",
"
3.19
\n",
"
3.40
\n",
"
10
\n",
"
102
\n",
"
5500
\n",
"
24
\n",
"
30
\n",
"
13950
\n",
"
\n",
"
\n",
"
4
\n",
"
2
\n",
"
audi
\n",
"
gas
\n",
"
std
\n",
"
4
\n",
"
sedan
\n",
"
4wd
\n",
"
front
\n",
"
99.4
\n",
"
176.6
\n",
"
...
\n",
"
136
\n",
"
mpfi
\n",
"
3.19
\n",
"
3.40
\n",
"
8
\n",
"
115
\n",
"
5500
\n",
"
18
\n",
"
22
\n",
"
17450
\n",
"
\n",
" \n",
"
\n",
"
5 rows × 25 columns
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
]
},
"metadata": {},
"execution_count": 98
}
]
},
{
"cell_type": "markdown",
"source": [
"We've selected four features that cover a range of properties. Each of these features also has a high MI score with the target, `price`. We'll standardize the data since these features aren't naturally on the same scale."
],
"metadata": {
"id": "PFIztg2qV1oA"
}
},
{
"cell_type": "code",
"source": [
"features = [\"highway_mpg\", \"engine_size\", \"horsepower\", \"curb_weight\"]\n",
"\n",
"X = df.copy()\n",
"y = X.pop('price')\n",
"X = X.loc[:, features]\n",
"\n",
"# Standardize\n",
"X_scaled = (X - X.mean(axis=0)) / X.std(axis=0)"
],
"metadata": {
"id": "idZp66RfVwXt"
},
"execution_count": 99,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"Now we can fit scikit-learn's `PCA` estimator and create the principal components. You can see here the first few rows of the transformed dataset."
],
"metadata": {
"id": "c3wTqeTBV4tg"
}
},
{
"cell_type": "code",
"source": [
"# Create principal components\n",
"pca = PCA()\n",
"X_pca = pca.fit_transform(X_scaled)\n",
"\n",
"# Convert to dataframe\n",
"component_names = [f\"PC{i+1}\" for i in range(X_pca.shape[1])]\n",
"X_pca = pd.DataFrame(X_pca, columns=component_names)\n",
"\n",
"X_pca.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "6JTcIZ7DV3J-",
"outputId": "c1e85fe9-e901-4a0a-9fc4-7786feb38168"
},
"execution_count": 100,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" PC1 PC2 PC3 PC4\n",
"0 0.382486 -0.400222 0.124122 0.169539\n",
"1 0.382486 -0.400222 0.124122 0.169539\n",
"2 1.550890 -0.107175 0.598361 -0.256081\n",
"3 -0.408859 -0.425947 0.243335 0.013920\n",
"4 1.132749 -0.814565 -0.202885 0.224138"
],
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
PC1
\n",
"
PC2
\n",
"
PC3
\n",
"
PC4
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
0.382486
\n",
"
-0.400222
\n",
"
0.124122
\n",
"
0.169539
\n",
"
\n",
"
\n",
"
1
\n",
"
0.382486
\n",
"
-0.400222
\n",
"
0.124122
\n",
"
0.169539
\n",
"
\n",
"
\n",
"
2
\n",
"
1.550890
\n",
"
-0.107175
\n",
"
0.598361
\n",
"
-0.256081
\n",
"
\n",
"
\n",
"
3
\n",
"
-0.408859
\n",
"
-0.425947
\n",
"
0.243335
\n",
"
0.013920
\n",
"
\n",
"
\n",
"
4
\n",
"
1.132749
\n",
"
-0.814565
\n",
"
-0.202885
\n",
"
0.224138
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
]
},
"metadata": {},
"execution_count": 100
}
]
},
{
"cell_type": "markdown",
"source": [
"After fitting, the `PCA` instance contains the loadings in its `components_` attribute. We'll wrap the loadings up in a dataframe."
],
"metadata": {
"id": "UEnzS398V-Cv"
}
},
{
"cell_type": "code",
"source": [
"loadings = pd.DataFrame(\n",
" pca.components_.T, # transpose the matrix of loadings\n",
" columns=component_names, # so the columns are the principal components\n",
" index=X.columns, # and the rows are the original features\n",
")\n",
"loadings"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 175
},
"id": "78T7AguDV7aO",
"outputId": "c2d11267-3440-4edb-9c55-1a8fa5837784"
},
"execution_count": 101,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" PC1 PC2 PC3 PC4\n",
"highway_mpg -0.492347 0.770892 0.070142 -0.397996\n",
"engine_size 0.503859 0.626709 0.019960 0.594107\n",
"horsepower 0.500448 0.013788 0.731093 -0.463534\n",
"curb_weight 0.503262 0.113008 -0.678369 -0.523232"
],
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
PC1
\n",
"
PC2
\n",
"
PC3
\n",
"
PC4
\n",
"
\n",
" \n",
" \n",
"
\n",
"
highway_mpg
\n",
"
-0.492347
\n",
"
0.770892
\n",
"
0.070142
\n",
"
-0.397996
\n",
"
\n",
"
\n",
"
engine_size
\n",
"
0.503859
\n",
"
0.626709
\n",
"
0.019960
\n",
"
0.594107
\n",
"
\n",
"
\n",
"
horsepower
\n",
"
0.500448
\n",
"
0.013788
\n",
"
0.731093
\n",
"
-0.463534
\n",
"
\n",
"
\n",
"
curb_weight
\n",
"
0.503262
\n",
"
0.113008
\n",
"
-0.678369
\n",
"
-0.523232
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
]
},
"metadata": {},
"execution_count": 101
}
]
},
{
"cell_type": "markdown",
"source": [
"Recall that the signs and magnitudes of a component's loadings tell us what kind of variation it's captured. The first component (`PC1`) shows a contrast between large, powerful vehicles with poor gas milage, and smaller, more economical vehicles with good gas milage. We might call this the \"Luxury/Economy\" axis. The next figure shows that our four chosen features mostly vary along the Luxury/Economy axis."
],
"metadata": {
"id": "oAx9iIwKWKrv"
}
},
{
"cell_type": "code",
"source": [
"# Look at explained variance\n",
"plot_variance(pca)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 456
},
"id": "rEHb4338WIUA",
"outputId": "d8d16d16-af1c-45a9-f70d-09b382af4ff5"
},
"execution_count": 102,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([,\n",
" ],\n",
" dtype=object)"
]
},
"metadata": {},
"execution_count": 102
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"Let's also look at the MI scores of the components. Not surprisingly, `PC1` is highly informative, though the remaining components, despite their small variance, still have a significant relationship with `price`. Examining those components could be worthwhile to find relationships not captured by the main Luxury/Economy axis."
],
"metadata": {
"id": "tEdlKVpvWRo2"
}
},
{
"cell_type": "code",
"source": [
"mi_scores = make_mi_scores(X_pca, y, discrete_features=False)\n",
"mi_scores"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "L_EhGRNuWPfg",
"outputId": "ba784c35-4b6b-42d9-e4a9-7d3a0b052ed8"
},
"execution_count": 103,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"PC1 1.013190\n",
"PC2 0.379271\n",
"PC3 0.306780\n",
"PC4 0.204163\n",
"Name: MI Scores, dtype: float64"
]
},
"metadata": {},
"execution_count": 103
}
]
},
{
"cell_type": "markdown",
"source": [
"The third component shows a contrast between `horsepower` and `curb_weight` -- sports cars vs. wagons, it seems."
],
"metadata": {
"id": "XX88JTAsWY9f"
}
},
{
"cell_type": "code",
"source": [
"# Show dataframe sorted by PC3\n",
"idx = X_pca[\"PC3\"].sort_values(ascending=False).index\n",
"cols = [\"make\", \"body_style\", \"horsepower\", \"curb_weight\"]\n",
"df.loc[idx, cols]"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 424
},
"id": "NhtyKfvHWUNY",
"outputId": "6ddde196-0e17-46cd-962c-e0fb0db78116"
},
"execution_count": 104,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" make body_style horsepower curb_weight\n",
"118 porsche hardtop 207 2756\n",
"117 porsche hardtop 207 2756\n",
"119 porsche convertible 207 2800\n",
"45 jaguar sedan 262 3950\n",
"96 nissan hatchback 200 3139\n",
".. ... ... ... ...\n",
"59 mercedes-benz wagon 123 3750\n",
"61 mercedes-benz sedan 123 3770\n",
"101 peugot wagon 95 3430\n",
"105 peugot wagon 95 3485\n",
"143 toyota wagon 62 3110\n",
"\n",
"[193 rows x 4 columns]"
],
"text/html": [
"\n",
"
"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"#### UMAP"
],
"metadata": {
"id": "gJIG1-zcacTO"
}
},
{
"cell_type": "markdown",
"source": [
"UMAP is useful for generating visualisations, but if you want to make use of UMAP more generally for machine learning tasks it is important to be be able to train a model and then later pass new data to the model and have it transform that data into the learned space. For example if we use UMAP to learn a latent space and then train a classifier on data transformed into the latent space then the classifier is only useful for prediction if we can transform data for which we want a prediction into the latent space the classifier uses. "
],
"metadata": {
"id": "RFco1ZdqawkV"
}
},
{
"cell_type": "code",
"source": [
"X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, stratify=digits.target, random_state=42)"
],
"metadata": {
"id": "Xd89JSOraYKk"
},
"execution_count": 117,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"Now to get a benchmark idea of what we are looking at let’s train a couple of different classifiers and then see how well they score on the test set. For this example let’s try a support vector classifier and a KNN classifier."
],
"metadata": {
"id": "4MoEzfIIbGh_"
}
},
{
"cell_type": "code",
"source": [
"svc = SVC(gamma='auto').fit(X_train, y_train)\n",
"knn = KNeighborsClassifier().fit(X_train, y_train)\n",
"svc.score(X_test, y_test), knn.score(X_test, y_test)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Iv6WyDIRa__H",
"outputId": "817ceab4-11cd-44b4-de28-91f2a6d38c57"
},
"execution_count": 121,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(0.62, 0.9844444444444445)"
]
},
"metadata": {},
"execution_count": 121
}
]
},
{
"cell_type": "markdown",
"source": [
"The goal now is to make use of UMAP as a preprocessing step that one could potentially fit into a pipeline. "
],
"metadata": {
"id": "Gx02oiB3b8nV"
}
},
{
"cell_type": "code",
"source": [
"trans = umap.UMAP(n_neighbors=5, random_state=42).fit(X_train)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "SU4gnbqrbM9h",
"outputId": "47e1956e-22ad-42cc-8906-69725e5f773f"
},
"execution_count": 122,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/numba/np/ufunc/parallel.py:363: NumbaWarning: The TBB threading layer requires TBB version 2019.5 or later i.e., TBB_INTERFACE_VERSION >= 11005. Found TBB_INTERFACE_VERSION = 9107. The TBB threading layer is disabled.\n",
" warnings.warn(problem)\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"plt.figure(figsize=(10, 8))\n",
"plt.scatter(trans.embedding_[:, 0], trans.embedding_[:, 1], c=y_train, cmap='Spectral', s=5)\n",
"plt.gca().set_aspect('equal', 'datalim')\n",
"plt.colorbar(boundaries=np.arange(11)-0.5).set_ticks(np.arange(10))\n",
"plt.title('Umap of the Digits dataset', fontsize=24)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 525
},
"id": "vKQdE0_LcFMG",
"outputId": "6e5d02a2-03c0-47e0-9291-829be88b7baf"
},
"execution_count": 125,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Umap of the Digits dataset')"
]
},
"metadata": {},
"execution_count": 125
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"This looks very promising! Most of the classes got very cleanly separated, and that gives us some hope that it could help with classifier performance. We can now train some new models (again an SVC and a KNN classifier) on the embedded training data. This looks exactly as before but now we pass it the embedded data. "
],
"metadata": {
"id": "NVGIGUqCcY-r"
}
},
{
"cell_type": "code",
"source": [
"svc = SVC(gamma='auto').fit(trans.embedding_, y_train)\n",
"knn = KNeighborsClassifier().fit(trans.embedding_, y_train)"
],
"metadata": {
"id": "vaiBl0iycI3W"
},
"execution_count": 131,
"outputs": []
},
{
"cell_type": "code",
"source": [
"test_embedding = trans.transform(X_test)"
],
"metadata": {
"id": "g1_0phAhchBB"
},
"execution_count": 128,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"The next important question is what the transform did to our test data. In principle we have a new two dimensional representation of the test-set, and ideally this should be based on the existing embedding of the training set"
],
"metadata": {
"id": "yqqhDql-c0M9"
}
},
{
"cell_type": "code",
"source": [
"plt.figure(figsize=(10, 8))\n",
"plt.scatter(test_embedding[:, 0], test_embedding[:, 1], c=y_test, cmap='Spectral', s=5)\n",
"plt.gca().set_aspect('equal', 'datalim')\n",
"plt.colorbar(boundaries=np.arange(11)-0.5).set_ticks(np.arange(10))\n",
"plt.title('Umap of the Digits dataset', fontsize=24)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 525
},
"id": "gblKRyguczF7",
"outputId": "b8edc9f9-21aa-4d60-b5c5-9260820bf94e"
},
"execution_count": 130,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Umap of the Digits dataset')"
]
},
"metadata": {},
"execution_count": 130
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"
"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"The results look like what we should expect; the test data has been embedded into two dimensions in exactly the locations we should expect (by class) given the embedding of the training data visualised above. This means we can now try out models that were trained on the embedded training data by handing them the newly transformed test set."
],
"metadata": {
"id": "LI9PGw5CdBFH"
}
},
{
"cell_type": "code",
"source": [
"svc.score(trans.transform(X_test), y_test), knn.score(trans.transform(X_test), y_test)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "__808eXkc38M",
"outputId": "960e5116-027b-4929-de7b-a88e6ef8337c"
},
"execution_count": 132,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(0.9822222222222222, 0.9822222222222222)"
]
},
"metadata": {},
"execution_count": 132
}
]
},
{
"cell_type": "markdown",
"source": [
"The results are pretty good. While the accuracy of the KNN classifier did not improve there was not a lot of scope for improvement given the data. On the other hand the SVC has improved to have equal accuracy to the KNN classifier!\n",
"\n",
"For more interesting datasets the larger dimensional embedding might have been a significant gain – it is certainly worth exploring as one of the parameters in a grid search across a pipeline that includes UMAP.\n",
"\n"
],
"metadata": {
"id": "1GN4oP95dSGe"
}
},
{
"cell_type": "markdown",
"source": [
"## Clustering"
],
"metadata": {
"id": "KqWbd1rSdync"
}
},
{
"cell_type": "markdown",
"source": [
"When used for feature engineering, we could attempt to discover groups of customers representing a market segment, for instance, or geographic areas that share similar weather patterns. Adding a feature of cluster labels can help machine learning models untangle complicated relationships of space or proximity."
],
"metadata": {
"id": "Gwnv4I6BesNV"
}
},
{
"cell_type": "markdown",
"source": [
"### Cluster Labels as a feature"
],
"metadata": {
"id": "WErqxr32gLk1"
}
},
{
"cell_type": "markdown",
"source": [
"Applied to a single real-valued feature, clustering acts like a traditional \"binning\" or \"discretization\" transform. On multiple features, it's like \"multi-dimensional binning\" (sometimes called vector quantization)."
],
"metadata": {
"id": "neHcqLiFgQfw"
}
},
{
"cell_type": "markdown",
"source": [
"It's important to remember that this Cluster feature is categorical. Here, it's shown with a label encoding (that is, as a sequence of integers) as a typical clustering algorithm would produce; depending on your model, a one-hot encoding may be more appropriate.\n",
"\n",
"The motivating idea **for adding cluster labels is that the clusters will break up complicated relationships across features into simpler chunks**. Our model can then just learn the simpler chunks one-by-one instead having to learn the complicated whole all at once. It's a \"divide and conquer\" strategy."
],
"metadata": {
"id": "igCdboqEgZGm"
}
},
{
"cell_type": "markdown",
"source": [
"As spatial features, [*California Housing*](https://www.kaggle.com/camnugent/california-housing-prices)'s `'Latitude'` and `'Longitude'` make natural candidates for k-means clustering. In this example we'll cluster these with `'MedInc'` (median income) to create economic segments in different regions of California."
],
"metadata": {
"id": "rxryA26wfL5-"
}
},
{
"cell_type": "markdown",
"source": [
"Since k-means clustering is sensitive to scale, it can be a good idea rescale or normalize data with extreme values. Our features are already roughly on the same scale, so we'll leave them as-is."
],
"metadata": {
"id": "4WNdYtx3fHYl"
}
},
{
"cell_type": "code",
"source": [
"df = fetch_california_housing(as_frame=True)['frame']"
],
"metadata": {
"id": "mfv9WpC_dGs9"
},
"execution_count": 136,
"outputs": []
},
{
"cell_type": "code",
"source": [
"X = df.loc[:, [\"MedInc\", \"Latitude\", \"Longitude\"]]\n",
"X.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "n-kpl0jAfTF7",
"outputId": "665d6557-c7d7-452f-956a-d5a9210dc570"
},
"execution_count": 138,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" MedInc Latitude Longitude\n",
"0 8.3252 37.88 -122.23\n",
"1 8.3014 37.86 -122.22\n",
"2 7.2574 37.85 -122.24\n",
"3 5.6431 37.85 -122.25\n",
"4 3.8462 37.85 -122.25"
],
"text/html": [
"\n",
"